#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
#include <iostream>
#include <cstring>

#define MOD 1000000007LL
#define ll long long
using namespace std;

ll N, M, K;

ll comb[111][111];
ll comb2[111][111];
ll dp[101][10101];

ll exp(ll n, ll e) {
  if (e == 0) return 1;
  else if (e == 1) return n%MOD;
  
  ll res = exp(n, e/2);
  res = (res * res) % MOD;
  if (e&1) res = (res * n) % MOD;
  return res;
}

ll doit(int ind, int quedan) {
  if (quedan < 0) return 0;
  if (ind < 0) {
    if (quedan) return 0;
    return 1;
  }
//  cout << ind << "  " << quedan << endl;
  ll &res = dp[ind][quedan];
  if (res >= 0) return res;
  res = 0;
  ll expo = 0;
  if (ind < (M%N)) expo++;
  //cout << ind << "  " << expo << endl;
  // elijo la cantidad que quedan
  for (int k = 0; k <= N; ++k) {
    ll val = comb2[N][k];
    if (expo) val = (val * comb[N][k]) % MOD;
    res = (res + (doit(ind-1, quedan-k) * val) % MOD) % MOD;
  }
  if (res < 0) { cout <<" IMPOSSIBLE " << endl; while (1);}
  return res;
}


int main() {
  int i, j, k;
  cin >> N >> M >> K;
  for (i = 0; i < 111; ++i) comb[i][i] = comb[i][0] = 1;
  for (i = 1; i < 111; ++i)
    for (j = 1; j < i; ++j) comb[i][j] = (comb[i-1][j-1] + comb[i-1][j]) % MOD;
  for (i = 0; i < 111; ++i) for (j = 0; j < 111; ++j) comb2[i][j] =
    exp(comb[i][j], M/N);
  memset(dp, -1, sizeof(dp));



  cout << doit(N-1,K) << endl; 
  return 0;
}
